﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Sige
{
    public partial class ModificarPersonas : Form
    {
        Accesoadatos datos = new Accesoadatos();
        DataTable codtipodoc = new DataTable();
        DataTable nacionalidades = new DataTable();
        DataTable nivel = new DataTable();
        DataTable localidades = new DataTable();
        DataTable persona = new DataTable();
        Tipos_documento tipodoc = new Tipos_documento();
        Nacionalidades nac = new Nacionalidades();
        Niveles_estudio niv = new Niveles_estudio();
        Clase_Localidades loc = new Clase_Localidades();
        Persona person = new Persona();
        bool controlCambiado = false;
        DateTime fechanacim = new DateTime();
        Funciones_Varias fv = new Funciones_Varias();

        public ModificarPersonas()
        {
            InitializeComponent();
        }

        private void ModificarPersonas_Load(object sender, EventArgs e)
        {
            //CARGA TODOS LOS DATATABLES:
            codtipodoc = tipodoc.ObtenerTablaTiposDoc();
            nac.Obtener_Tabla_Nacionalidades(ref nacionalidades);
            niv.Obtener_Nivel_Estudio(ref nivel);
            //AHORA CARGA TODOS LOS COMBOS:
            fv.Carga_Combos(ref cboCodTipoDocumento, codtipodoc, "tipodocumento", "descripcion");
            fv.Carga_Combos(ref cboCodNacionalidad, nacionalidades, "codigo", "pais");
            fv.Carga_Combos(ref cboCodNivelEstudio, nivel, "codigo", "titulo");
            btnGuardarCambios.Enabled = false;
        }

        private void txtNroDocumento_Leave(object sender, EventArgs e)
        {
            string numdoc = txtNroDocumento.Text;
            if (numdoc != "")
            {
                fv.Sacar_Ceros_Izquierda(ref numdoc);
            }
            if (person.Persona_Existente(cboCodTipoDocumento.Text, numdoc) == false)
            {
                MessageBox.Show("La persona no existe", "Error al mostrar Persona", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtNroDocumento.Clear();
                txtNroDocumento.Focus();
            }
            else
            {
                //LIMPIO EL DATATABLE:
                persona.Clear();
                //ARMO EL DATATABLE CON EL REGISTRO QUE COINCIDA EN CODIGO Y NRO DE DOCUMENTO:
                person.ObtenerTablaPersonaPorDocumento(ref persona, cboCodTipoDocumento.Text, numdoc);
                //COPIO EN EL OBJETO PERSONA LOS DATOS DEL DATATABLE OBTENIDO:
                person.ObtenerPersonaDesdeDatatable(ref person, persona);
                //MUESTRO EL CONTENIDO DEL OBJETO PERSONA EN EL FORMULARIO:
                Llenar_Form_Con_Persona(person);
            }
        }

        private void cboCodTipoDocumento_Leave(object sender, EventArgs e)
        {
            Tipos_documento tipodoc = new Tipos_documento();
            if (cboCodTipoDocumento.Text != "")
                txtMostrarTipoDocum.Text = tipodoc.ObtenerDescripcion(cboCodTipoDocumento.Text);
            else
            {
                MessageBox.Show("Debe ingresar un código de documento", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                cboCodTipoDocumento.Focus();
            }
        }

        public void Llenar_Form_Con_Persona(Persona p)
        {
            string descl = "";
            string descn = "";
            string descne = "";
            txtNombre.Text = p.Nombre;
            txtApellido.Text = p.Apellido;
            txtDireccion.Text = p.Direccion;
            txtCodPostal.Text = p.CodigoPostal;
            loc.Localidad_Existente(datos.getruta(), txtCodPostal.Text, ref descl);
            txtMostrarLocalidad.Text = descl;
            txtTelefono.Text = p.Telefono;
            txtEmail.Text = p.Email;
            txtDiaNacim.Text = p.FechaNacimiento.ToString().Substring(0, 2);
            txtMesNacim.Text = p.FechaNacimiento.ToString().Substring(3, 2);
            txtAnioNacim.Text = p.FechaNacimiento.ToString().Substring(6, 4);
            cboCodNacionalidad.Text = p.CodigoNacionalidad;
            nac.Descripcion_Nacionalidad_Existente(datos.getruta(), cboCodNacionalidad.Text, ref descn);
            txtMostrarNacionalidad.Text = descn;
            cboCodNivelEstudio.Text = p.CodigoNivelEstudio;
            if (cboCodNivelEstudio.Text == "") txtMostrarNivelEst.Text = "";
            else
            {
                niv.Descripcion_NivelEstudio_Existente(datos.getruta(), ref descne);
                txtMostrarNivelEst.Text = descne;
            }
            cboCodNacionalidad.Focus();
            //cboCodNivelEstudio.Focus();
            btnGuardarCambios.Enabled = true;
            cboCodTipoDocumento.Enabled = false;
            txtNroDocumento.Enabled = false;
        }

        private void txtCodPostal_Leave(object sender, EventArgs e)
        {
            if (txtCodPostal.Text != "")
            {
                string nombre = "";
                if (loc.Localidad_Existente(datos.getruta(), txtCodPostal.Text.ToString(), ref nombre) == true)
                    txtMostrarLocalidad.Text = nombre;
                else
                {
                    if (MessageBox.Show("La localidad seleccionada no existe. ¿Desea ingresarla?", "No se encontró localidad", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        AltaLocalidades altaloc = new AltaLocalidades(txtCodPostal.Text);
                        altaloc.Show();
                    }
                    else
                    {
                        txtCodPostal.Clear();
                        txtCodPostal.Focus();
                    }
                }
            }
            else
            {
                MessageBox.Show("Debe ingresar un código postal", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                txtCodPostal.Focus();
            }
        }

        private void cboCodNacionalidad_Leave(object sender, EventArgs e)
        {
            if (cboCodNacionalidad.Text != "")
            {
                txtMostrarNacionalidad.Text = cboCodNacionalidad.SelectedValue.ToString();
            }
            else txtMostrarNacionalidad.Text = "";
        }

        private void cboCodNivelEstudio_Leave(object sender, EventArgs e)
        {
            if (cboCodNivelEstudio.Text != "")
            {
                txtMostrarNivelEst.Text = cboCodNivelEstudio.SelectedValue.ToString();
            }
            else
                txtMostrarNivelEst.Text = "";
        }

        private void btnNuevaConsulta_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea realizar una nueva consulta?", "Nueva consulta", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                fv.Limpiar_Todos_Los_Textbox(this);
                persona.Clear();
                cboCodTipoDocumento.Enabled = true;
                txtNroDocumento.Enabled = true;
                cboCodTipoDocumento.Focus();
                btnGuardarCambios.Enabled = false;
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            if (controlCambiado == true)
            {
                if (MessageBox.Show("Algunos datos del formulario han cambiado. ¿Desea salir de todos modos?", "Atención", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
                {
                    ActiveForm.Close();
                }
            }
        }

        private void cboCodTipoDocumento_SelectionChangeCommitted(object sender, EventArgs e)
        {
            fv.Se_Modificaron_Controles(ref controlCambiado);
        }

        private void txtNroDocumento_TextChanged(object sender, EventArgs e)
        {
            fv.Se_Modificaron_Controles(ref controlCambiado);
        }

        private void txtNombre_TextChanged(object sender, EventArgs e)
        {
            fv.Se_Modificaron_Controles(ref controlCambiado);
        }

        private void txtApellido_TextChanged(object sender, EventArgs e)
        {
            fv.Se_Modificaron_Controles(ref controlCambiado);
        }

        private void txtDireccion_TextChanged(object sender, EventArgs e)
        {
            fv.Se_Modificaron_Controles(ref controlCambiado);
        }

        private void txtCodPostal_TextChanged(object sender, EventArgs e)
        {
            fv.Se_Modificaron_Controles(ref controlCambiado);
        }

        private void txtTelefono_TextChanged(object sender, EventArgs e)
        {
            fv.Se_Modificaron_Controles(ref controlCambiado);
        }

        private void txtEmail_TextChanged(object sender, EventArgs e)
        {
            fv.Se_Modificaron_Controles(ref controlCambiado);
        }

        private void txtDiaNacim_TextChanged(object sender, EventArgs e)
        {
            fv.Se_Modificaron_Controles(ref controlCambiado);
        }

        private void txtMesNacim_TextChanged(object sender, EventArgs e)
        {
            fv.Se_Modificaron_Controles(ref controlCambiado);
        }

        private void txtAnioNacim_TextChanged(object sender, EventArgs e)
        {
            fv.Se_Modificaron_Controles(ref controlCambiado);
        }

        private void cboCodNacionalidad_SelectionChangeCommitted(object sender, EventArgs e)
        {
            fv.Se_Modificaron_Controles(ref controlCambiado);
        }

        private void cboCodNivelEstudio_SelectionChangeCommitted(object sender, EventArgs e)
        {
            fv.Se_Modificaron_Controles(ref controlCambiado);
        }

        private void btnGuardarCambios_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Va a modificar datos de un registro existente. ¿Está seguro?", "Atención", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
            {
                if (fv.Validar_Todo(this, ref fechanacim) == true)
                {
                    Persona person = new Persona(cboCodTipoDocumento.Text, txtNroDocumento.Text,
                            txtNombre.Text, txtApellido.Text, txtDireccion.Text, txtCodPostal.Text,
                            txtTelefono.Text, txtEmail.Text, fechanacim, cboCodNacionalidad.Text,
                            cboCodNivelEstudio.Text);
                    if (person.Modificar() == true)
                    {
                        if (MessageBox.Show("El registro ha sido grabado con éxito. ¿Desea ingresar un nuevo registro?", "El registro se grabó", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                        {
                            fv.Limpiar_Todos_Los_Textbox(this);
                            persona.Clear();
                            cboCodTipoDocumento.Enabled = true;
                            txtNroDocumento.Enabled = true;
                            cboCodTipoDocumento.Focus();
                            btnGuardarCambios.Enabled = false;
                        }
                        else this.Close();
                    }
                }
                else
                {
                    MessageBox.Show("No se pudo modificar Persona", "Error al modificar Persona", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

    }
    }
